
#ifndef Stopwatch_H
#define Stopwatch_H

// CSharp includes.
#include <Typedef.h>
#include <Defines.h>
#include <CSharpPropertyMethods.h>
#include <CSharpGarbagePointer.h>

#include <System/TimeSpan.h>

namespace Riccsson
{
	namespace System
	{
		namespace Diagnostics
		{
			// Summary:
			//     Provides a set of methods and properties that you can use to accurately measure
			//     elapsed time.
			class Stopwatch
			{
				// Summary:
				//     Gets the frequency of the timer as the number of ticks per second. This field
				//     is read-only.
				public: static readonly long Frequency;
				//
				// Summary:
				//     Indicates whether the timer is based on a high-resolution performance counter.
				//     This field is read-only.
				public: static readonly bool IsHighResolution;

				// Summary:
				//     Initializes a new instance of the System.Diagnostics.Stopwatch class.
				public: Stopwatch()
				{
					throw;
				}

				// Summary:
				//     Gets the total elapsed time measured by the current instance.
				//
				// Returns:
				//     A read-only System.TimeSpan representing the total elapsed time measured
				//     by the current instance.
				public: PROP3_GET(TimeSpan, Elapsed)
				{
					throw;
				}

				//
				// Summary:
				//     Gets the total elapsed time measured by the current instance, in milliseconds.
				//
				// Returns:
				//     A read-only long integer representing the total number of milliseconds measured
				//     by the current instance.
				public: PROP3_GET(long, ElapsedMilliseconds)
				{
					throw;
				}

				//
				// Summary:
				//     Gets the total elapsed time measured by the current instance, in timer ticks.
				//
				// Returns:
				//     A read-only long integer representing the total number of timer ticks measured
				//     by the current instance.
				public: PROP3_GET(long, ElapsedTicks)
				{
					throw;
				}

				//
				// Summary:
				//     Gets a value indicating whether the System.Diagnostics.Stopwatch timer is
				//     running.
				//
				// Returns:
				//     true if the System.Diagnostics.Stopwatch instance is currently running and
				//     measuring elapsed time for an interval; otherwise, false.
				public: PROP3_GET(bool, IsRunning)
				{
					throw;
				}

				// Summary:
				//     Gets the current number of ticks in the timer mechanism.
				//
				// Returns:
				//     A long integer representing the tick counter value of the underlying timer
				//     mechanism.
				public: static long GetTimestamp()
				{
					throw;
				}

				//
				// Summary:
				//     Stops time interval measurement and resets the elapsed time to zero.
				public: void Reset()
				{
					throw;
				}

				//
				// Summary:
				//     Stops time interval measurement, resets the elapsed time to zero, and starts
				//     measuring elapsed time.
				public: void Restart()
				{
					throw;
				}

				//
				// Summary:
				//     Starts, or resumes, measuring elapsed time for an interval.
				public: void Start()
				{
					throw;
				}

				//
				// Summary:
				//     Initializes a new System.Diagnostics.Stopwatch instance, sets the elapsed
				//     time property to zero, and starts measuring elapsed time.
				//
				// Returns:
				//     A System.Diagnostics.Stopwatch that has just begun measuring elapsed time.
				public: static GC_PTR<Stopwatch> StartNew()
				{
					throw;
				}

				//
				// Summary:
				//     Stops measuring elapsed time for an interval.
				public: void Stop()
				{
					throw;
				}
			};
		}
	}
}

#endif